package com.hjqjl.whdemo.net;

import com.blankj.utilcode.util.ToastUtils;
import com.google.gson.JsonParseException;

import org.json.JSONException;

import java.io.InterruptedIOException;
import java.net.ConnectException;
import java.net.UnknownHostException;
import java.text.ParseException;

import retrofit2.HttpException;

/**
 * @date :2021/4/2 14:11 wh
 * <p>
 * 联网的错误处理
 */
public class ExceptionHandle {
    private static class ExceptionHandleHolder {
        private static final ExceptionHandle INSTANCE = new ExceptionHandle();
    }

    private ExceptionHandle() {
    }

    public static ExceptionHandle getInstance() {
        return ExceptionHandleHolder.INSTANCE;
    }

    public void handleException(Throwable e, String portName) {
        if (e instanceof HttpException) {
            ToastUtils.showShort(portName + "服务器异常" + ((HttpException) e).code());
            //404（NotFound）：服务器无法根据客户端的请求找到资源（网页）
            //301（MovedPermanently）：永久移动。请求的资源已被永久的移动到新URI。
            //302（Found）：临时移动。与301类似。但资源只是临时被移动。
            //400（BadRequest）：客户端请求的语法错误，服务器无法理解。
            //500（InternalServerError）：服务器内部错误，无法完成请求。
            //403（Forbidden）：服务器理解请求客户端的请求，但是拒绝执行此请求。
            //401（Unauthorized）：请求需要有通过HTTP认证（BASIC认证，DIGEST认证）的认证信息。
        } else if (e instanceof ConnectException || e instanceof UnknownHostException) {
            //连接错误
            ToastUtils.showShort(portName + "网络连接失败,请检查网络");
        } else if (e instanceof InterruptedIOException) {
            //连接超时
            ToastUtils.showShort(portName + "连接超时,请稍后再试");
        } else if (e instanceof JsonParseException || e instanceof JSONException || e instanceof ParseException) {
            //解析错误
            ToastUtils.showShort(portName + "解析服务器响应数据失败");
        } else {
            //其他错误
            ToastUtils.showShort(portName + "未知错误");
        }
    }
}
